package com.tanhua.dubbo.api.impl.mongo;

import com.tanhua.domain.mongo.Explore;
import com.tanhua.dubbo.api.mongo.ExploreApi;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;

/**
 * 用户滑动次数实现类
 */
@Service
public class ExploreApiImpl implements ExploreApi {

    //注入mongo
    @Autowired
    private MongoTemplate mongoTemplate;


    /**
     * 查询用户滑动次数
     * @param userId 用户id
     * @param exploreType 滑动类型
     * @return
     */
    @Override
    public Long queryUserCount(Long userId, String exploreType) {
        //创建查询对象（查询某个用户）
        Query query = new Query(Criteria.where("userId").is(userId).and("collname").is(exploreType));
        //创建修改对象
        Update update = new Update();
        //修改查询数
        update.inc("count", 1);
        //创建选项对象
        FindAndModifyOptions options = new FindAndModifyOptions();
        // 先查询，如果没有符合条件的，会执行插入
        options.upsert(true);
        // 返回当前最新值
        options.returnNew(true);
        //查询并修改
        Explore explore = mongoTemplate.findAndModify(query, update, options, Explore.class);
        //返回查询数
        return explore.getCount();
    }


    /**
     * 清空所有用户的查询数
     */
    @Override
    public void empty() {
        Query query = new Query(Criteria.where("collname").is("explore"));
        Update update = Update.update("count", 1);
        mongoTemplate.updateFirst(query,update,Explore.class);
    }
}
